class Solution {
public:
    /**
     * return topK string
     * @param strings string字符串vector strings
     * @param k int整型 the k
     * @return string字符串vector<vector<>>
     */
    vector<vector<string> > topKstrings(vector<string>& strings, int k) {
        // write code here
        map<string,int>  map_count;
         vector<vector<string> > rlt;
        if(k==0||k>strings.size()) return rlt;
        for(auto &ele : strings)
        {
            map_count[ele]++;   ///注意这里 map的int应该是初始化为0了
        }
        
        auto cmp=[](pair<string,int> a,pair<string,int> b){  return a.second>b.second ||   a.second==b.second&&a.first<b.first;};
        priority_queue<pair<string,int>,vector<pair<string,int>>,decltype(cmp)> p(cmp);   //优先队列使用的container
        for(auto &ele :map_count)
        {
            if(static_cast<int>(p.size())<k)
               {
                p.push(ele);
               }
               else if(!cmp(p.top(),ele))  //注意这里利用了之前写的cmp
               {
                   p.pop();
                   p.push(ele);
               }
        }
       /* 错误  优先队列只能一个一个pop
        for(auto& ele:p )  
        {
           
        }
        */
        while(!p.empty())
        {
            rlt.push_back(vector<string>{p.top().first,to_string(p.top().second)});  //注意这里的元素推入方式
            p.pop();
        }
        reverse(rlt.begin(),rlt.end());
        return rlt;
        
    }
};












//几个问题 multimap 没有[]因为该容器是一对多
//map的key给定就不能改变，可以给multimap让其重新排序



















class Solution {
public:
   string frequencySort(string s) {
	map<char, int> mp;
	
	for (int i = 0; i < s.size(); i++)
	{
		mp[s[i]]++;
	}
	multimap<int, char> mp1;
	for (auto ele : mp)
	{
		mp1.insert({ ele.second, ele.first });
	}
	
	string rs("");
	for (auto ele : mp1)
	{

		string substr(ele.first,ele.second);
		
		//string substr(&ele.first, ele.second);
		rs = substr + rs;
	}
	return rs;
}
};
